Streaming video over data networks (e.g., the internet) has become increasingly popular as the availability of high-bandwidth internet connections has increased. Video streaming refers to a type of video delivery mechanism where the data for the video is continuously delivered to a client device over a data network (e.g., the internet) as the user is viewing the video. Video streaming allows a user to start viewing portions of the video without having to first download the entire video.
Pre-recorded video content or live video content can be streamed over the internet using streaming protocols such as HTTP Live Streaming (HLS) and MPEG Dynamic Adaptive Streaming over HTTP (DASH). Such streaming protocols typically divide video content into a series of video segments and generate a streaming manifest file (also referred to as an index file) that references these video segments. A client device can interpret the streaming manifest file to fetch the video segments and seamlessly assemble the video segments to play the video content. Users sometimes like to watch video content in groups, that is, to watch the same video content at the same time at multiple separate client media player applications. Synchronizing internet (“over the top”) video streams for simultaneous playback to allow multiple users to watch the same video content at the same time presents a number of challenges. Some systems for synching streaming video use the Real-time Transport Protocol (RTP) and the Real Time Streaming Protocol (RTSP), potentially with multicast addressing, to send video content out to multiple clients at the same time. This approach can work but presents several challenges for systems that deliver a modern online video service based on HLS and MPEG-DASH.